//
//  NSDate+Ext.h
//  Pickers
//
//  Created by chaizhiyong on 14-7-30.
//
//

#import <Foundation/Foundation.h>

@interface NSDate (Ext)
/*
 * NSDate 转时间戳（NSString）
 */
- (NSString*)getTimestamp; //返回时间戳

- (NSString *)formateCurrentDate;

- (NSString *)formateChatCurrentDate;

- (NSString *)formateChatCurrentDateFromMe;
//返回当前月
+ (NSInteger)currentMonthNum;
//返回当前年
+ (NSInteger)currentYearNum;

//返回12:00
+ (NSString*)getHourWithTimeStamp:(NSString*)timeStamp;

//是当天返回 返回 12：00 格式 昨天的 返回 昨天  其他的返回 10/20
+ (NSString*)getGregorianCalendarWithTimeStamp:(NSString*)timeStamp;
//是 当天返回---今天12：00格式, 昨天的返回--昨天+时间格式 , 其他的返回 10/20+时间
+ (NSString*)getGregorianCalendarAndTimeWithTimeStamp:(NSDate*)Datetime;
//返回格式  上午  12：00：00
//+ (NSString *)compareDate:(NSDate *)date;
//返回格式  2014-12-00  12：00：00
+ (NSString *)speCompareCurDate;
//返回日期  2015-12-00
+(NSString *)stringYearMonthDayWithTimeStamp:(NSString*)timeStamp;

//返回日期  2015/12/00 12:00
+(NSString *)stringFullDateTimeStamp:(NSString*)timeStamp;

//返回日期  年 月 日
+(NSString *)returnYearMonthDayWithTimeStamp:(NSString*)timeStamp;
/*
 * 返回格式  2014-12-00  12：00：00
 * parameter date
 */
+(NSString*)coverDateFormatterWithDate:(NSDate*)date;

/*
* 返回格式  2014-12-00
* parameter date
*/
+ (NSString *)coveDateUserYearMountDayWithDate:(NSDate*)date;

//loveCode 
+ (NSString *)formateDate:(NSString *)dateString withFormate:(NSString *) formate;
+ (NSString *)formateDateNew:(NSString *)dateString withFormate:(NSString *) formate;
+ (NSString *)formateDateWithDate:(NSDate *)date;
+ (NSString* )formatMonthWithDate:(NSDate *)date;
+ (NSString* )formatYear_MonthWithDate:(NSDate *)date;
+ (NSString* )formatYear_Month_Day_WithDate:(NSDate *)date;
+ (NSDate*)coverDateWithFormatter:(NSString*)time;  //2014-10-5 12:00:00 转成date
+ (NSDate *)coverDateWithFormatter:(NSString *)time format:(NSString *)format;

+ (BOOL)isBetweenFromTime:(NSDate*)fromTime toTime:(NSDate*)toTime; //判断当前时间是否在一天的某个时间段内

+ (BOOL)isBetweenFromHour:(NSInteger)fromHour toHour:(NSInteger)toHour;

+ (NSDate *)getDateWithTimeStamp:(NSString*)timeStamp;

//返回格式 上午 8:00
+ (NSString*)getGregorianWithTimeStamp:(NSString *)timeStamp;

//返回格式 上午 8:00 上边那个方法会在时间戳+16小时，这个是+8小时
+ (NSString*)getNormalWithTimeStamp:(NSString *)timeStamp;

//传入NSDate 返回格式 上午 8:00
+ (NSString*)getGregorianWithdate:(NSDate *)date;

+ (BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate;

+ (BOOL)timestamp:(NSString*)dateStr isBetweenDate:(NSString*)beginDateStr andDate:(NSString*)endDateStr;

//返回当前时间后多长时间内的时间
+ (NSString *) returnDateFromNow:(NSInteger)days;


#pragma mark ---- 返回聊天结束时间格式
+ (NSDate *)returnDateByTimer:(NSString *)timerString;

+ (NSString *)timeFormatted:(int)totalSeconds;

/*
 * 两个date的时间差 返回 XX小时XX分XX秒
 * parameter  startDate 开始时间
 * parameter  endDate 结束时间
 */
+ (NSString *)intervalFromLastDate:(NSDate *)startDate toTheDate:(NSDate *) endDate;
/*
 * 返回 XX小时XX分XX秒
 */
+ (NSString *)intervalFromTimeInterval:(long long)timeInterval;

/*
 * 返回 当前日期 2014-12-00
 */
+ (NSString *)currentDate;



/**
 日期转字符串

 @param date 日期
 @param dateFormat 日期格式
 @return 字符串
 */
+(NSString*)convertDateToDateString:(NSDate*)date andDateFormat:(NSString*)dateFormat;


/**
 字符串转日期

 @param dateString 字符串
 @param dateFormat 日期格式
 @return 日期
 */
+(NSDate*)convertDateStringToDate:(NSString*)dateString andDateFormat:(NSString*)dateFormat;


/**
 获取指定日期所在月份的第一天是星期几

 @param date 指定日期
 @return 该月第一天星期几
 */
+ (NSInteger)firstWeekdayInThisMonth:(NSDate *)date;


/**
 获取指定日期所在月份的第一天日期

 @param date 指定日期
 @return 第一天日期
 */
+(NSDate*)getFirstDayofThisMonthWithDate:(NSDate*)date;


/**
 获取指定日期所在月份的最后一天日期

 @param date 指定日期
 @param dateFormat 日期格式
 @return 最后一天日期
 */
+(NSDate*)getLastDayOfThisMonthWithDate:(NSDate*)date andDateFormat:(NSString*)dateFormat;


/**
 获取指定日期是星期几

 @param date 日期
 @return 星期几
 */
+(NSInteger)weekdayOfDestinationDate:(NSDate*)date;


/**
 获取指定日期所在月份一共有多少天

 @param date 指定日期
 @return 该日期所在月份共有多少天
 */
+(NSInteger)totaldaysInThisMonth:(NSDate *)date;



/**
 比较两个日期字符串的大小

 @param oneDateStr 日期一
 @param TwoDateStr 日期二
 @param dateFormat 日期格式
 @return 比较结果
 */
+(NSComparisonResult)compareDateWithOneDate:(NSString *)oneDateStr andTwoDate:(NSString *)TwoDateStr andDateFormat:(NSString*)dateFormat;



/**
 比较一组日期，获取最小值和最大值

 @param dateArr 日期数组
 @param dateFormat 日期格式
 @return 最小值和最大值
 */
+(NSArray<NSString*>*)getMaxDateAndMinDateWithDateArr:(NSArray<NSString*>*)dateArr andDateFormat:(NSString*)dateFormat;



/**
 获取两个日期之间相差多少个月(只计算到具体月份，不算天数)

 @param startDateStr 开始日期
 @param endDateStr 结束日期
 @param dateFormat 日期格式
 @return 相差多少月份
 */
+(NSInteger)computeMonthsWithStartDate:(NSString *)startDateStr andEndDate:(NSString *)endDateStr andDateFormat:(NSString *)dateFormat;


/**
 获取指定日期相差n个月的日期

 @param dateStr 指定日期
 @param month 多少个月
 @param dateFormat 日期格式
 @return 目标日期
 */
+(NSString*)getDestinationDateFromDate:(NSString*)dateStr andMonth:(NSInteger)month andDateFormat:(NSString *)dateFormat;



/**
 筛选出一组日期和指定日期属于同一个月的日期

 @param dateArr 一组日期
 @param destinationDateStr 目标日期
 @param dateFormat 日期格式
 @return 筛选出的符合要求的日期数组
 */
+(NSArray<NSString*>*)filterSameMonthDateWithDateArr:(NSArray<NSString*>*)dateArr andDestinationDate:(NSString*)destinationDateStr andDateFormat:(NSString *)dateFormat;


/// 计算多少天后的日期
/// @param days 多少天后
/// @param date 当前日期
+ (NSString *)computeDateWithDays:(NSInteger)days fromDateString:(NSString *)date;


/// 计算一个月后的日期
/// @param date 时间
/// @param month 几个月后
+(NSDate *)getPriousorLaterDateFromDate:(NSDate *)date withMonth:(NSInteger)month;
@end
